汉诺塔问题 hanoi tower (递归)。

本文详细介绍了汉诺塔问题的递归解法,包括如何通过递归求解移动次数和输出移动步骤。当柱子A上有n个盘子时,最少需要2^n - 1次移动。代码实现包含两个递归函数,hanoi()计算步数,hanoi_tower()输出步骤。递归的关键在于借助辅助柱子B,将盘子从A移动到C。当n=64时,计算量巨大,可能需要天文数字的运算时间。
摘要由CSDN通过智能技术生成

又来填坑了。
还是递归问题,这次是汉诺塔。
题意是这样的:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,并输出移动的步骤。
由用户自定义输入金盘的个数n。
可以测试数据:当n=3时,自己模拟一下移动的步骤;
例如:
当A柱子上有3个从上往下按照从小到大依次排列盘子时,要把这3个金盘全部移动到C柱子上,且仍然是从上往下按照从小到大的放置顺序。步骤如下:
(记这3个盘子的编号为x,y,z,x在最上,y在中间,z在最下)
第一步:把 x 从A移动到C; 此时的情况(从上到下):A有yz,B有0,C有x
第二步:把 y 从A移动到B; 此时的情况(从上到下):A有z,B有y,C有x
第三步:把 x 从C移动到B; 此时的情况(从上到下):A有z,B有xy,C有0
第四步:把 z 从A移动到C; 此时的情况(从上到下):A有0,B有xy,C有z
第五步:把 x 从B移动到A; 此时的情况(从上到下):A有x,B有y,C有z
第六步:把 y 从B移动到C; 此时的情况(从上到下):A有x,B有0,C有yz
第七步:把 x 从A移动到C; 此时的情况(从上到下):A有0,B有0,C有xyz

移动完毕。
先讨论输出一共有多少步骤的这个问题。其实自己实验一下可以发现这是有规律的:
n 步数(记为t)
1 1
2 3
3 7
4 15
………….

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值